import axios from 'axios';
import { message } from 'antd';

// 创建axios实例
const request = axios.create({
  baseURL: '/api',
  timeout: 10000,
  withCredentials: true, // 允许跨域请求携带cookie
});

// 请求拦截器
request.interceptors.request.use(
  (config) => {
    // 从localStorage获取token
    const token = localStorage.getItem('token');
    if (token) {
      // 根据SaToken的要求设置token
      // SaToken默认使用"satoken"作为token名称
      config.headers['satoken'] = token;
      // 同时也设置Authorization头，以防其他接口需要
      config.headers['Authorization'] = `Bearer ${token}`;
      // 如果是SaToken，可能还需要设置特定的头部
      // 这里不再设置，因为可能会导致请求头过大
    }
    return config;
  },
  (error) => {
    console.error('请求拦截器错误:', error);
    return Promise.reject(error);
  }
);

// 响应拦截器
request.interceptors.response.use(
  (response) => {
    const res = response.data;

    // 登录接口特殊处理，直接返回数据
    if (response.config.url.includes('/sys/user/login')) {
      console.log('登录接口响应:', res);
      return res;
    }

    // 检查是否有token过期或未登录的错误码
    if (res.code === 401 || res.code === 1001) {
      message.error(res.msg || '登录已过期，请重新登录');
      // 清除本地token
      localStorage.removeItem('token');
      // 跳转到登录页
      setTimeout(() => {
        window.location.href = '/login';
      }, 1500);
      return Promise.reject(new Error(res.msg || '登录已过期'));
    }

    return res;
  },
  (error) => {
    // 处理401未授权错误
    if (error.response && error.response.status === 401) {
      message.error('登录已过期，请重新登录');
      localStorage.removeItem('token');
      setTimeout(() => {
        window.location.href = '/login';
      }, 1500);
    } else if (error.response && error.response.status === 403) {
      message.error('没有权限访问该资源');
    } else if (error.response && error.response.status === 404) {
      message.error('请求的资源不存在');
    } else if (error.response && error.response.status === 500) {
      message.error('服务器内部错误');
    } else if (error.message.includes('timeout')) {
      message.error('请求超时，请稍后再试');
    } else {
      message.error(error.response?.data?.msg || error.message || '服务器错误');
    }
    return Promise.reject(error);
  }
);

export default request;
